home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / program / pcl4c60.zip / PCL4CREF.DOC < prev    next >
Text File  |  1996-10-24  |  60KB  |  1,562 lines

  1.  
  2.  
  3.  
  4.                          Personal Communications Library
  5.  
  6.                                For the C Language
  7.  
  8.  
  9.                                      (PCL4C)
  10.  
  11.  
  12.                                REFERENCE MANUAL
  13.  
  14.  
  15.  
  16.                                    Version 6.0
  17.  
  18.                                 October 21, 1996
  19.  
  20.  
  21.  
  22.                          This software is provided as-is.
  23.                   There are no warranties, expressed or implied.
  24.  
  25.  
  26.  
  27.  
  28.                                Copyright (C) 1995
  29.                                All rights reserved
  30.  
  31.  
  32.  
  33.                             MarshallSoft Computing, Inc.
  34.                                Post Office Box 4543
  35.                                Huntsville AL 35815
  36.  
  37.  
  38.                              Voice : 205-881-4630
  39.                                FAX : 205|880|0925
  40.                                BBS : 205-880-9748
  41.                              email : info@marshallsoft.com
  42.                           Anon FTP : ftp.marshallsoft.com /marshallsoft
  43.                                web : www.marshallsoft.com
  44.  
  45.  
  46.                                    _______
  47.                               ____|__     |                (R)
  48.                            --+       |    +-------------------
  49.                              |   ____|__  |  Association of
  50.                              |  |       |_|  Shareware
  51.                              |__|   o   |    Professionals
  52.                            --+--+   |   +---------------------
  53.                                 |___|___|    MEMBER
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.      PCL4C Reference Manual                                    Page 1
  61.  
  62.                                   C O N T E N T S
  63.  
  64.  
  65.  
  66.               Chapter                                     Page
  67.  
  68.               Table of Contents.............................2
  69.               Introduction..................................3
  70.                  SioBaud....................................4
  71.                  SioBrkKey..................................4
  72.                  SioBrkSig..................................5
  73.                  SioCTS.....................................5
  74.                  SioDCD.....................................6
  75.                  SioDelay...................................6
  76.                  SioDone....................................7
  77.                  SioDSR.....................................7
  78.                  SioDTR.....................................8
  79.                  SioError...................................8
  80.                  SioFIFO....................................9
  81.                  SioFlow....................................9
  82.                  SioGetc...................................10
  83.                  SioGetDiv.................................10
  84.                  SioGets...................................11
  85.                  SioInfo...................................11
  86.                  SioIRQ....................................12
  87.                  SioLine...................................12
  88.                  SioLoopBack...............................13
  89.                  SioModem..................................13
  90.                  SioParms..................................14
  91.                  SioPorts..................................14
  92.                  SioPutc...................................15
  93.                  SioPuts...................................15
  94.                  SioRead...................................16
  95.                  SioReset..................................16
  96.                  SioRI.....................................17
  97.                  SioRTS....................................17
  98.                  SioRxBuf..................................18
  99.                  SioRxClear................................18
  100.                  SioRxQue..................................19
  101.                  SioStats..................................19
  102.                  SioTimer..................................20
  103.                  SioTxBuf..................................20
  104.                  SioTxClear................................21
  105.                  SioTxFlush................................21
  106.                  SioTxQue..................................22
  107.                  SioUART...................................22
  108.                  SioUnGetc.................................23
  109.               Function Summary.............................24
  110.               Error Code Summary...........................25
  111.               Code Examples................................26
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.      PCL4C Reference Manual                                    Page 2
  121.  
  122.       Introduction
  123.  
  124.       This manual lists all of the PCL4C functions in alphabetical order.
  125.       Every library function will return a value as follows:
  126.  
  127.       1.  Negative values for error conditions. See last page of this
  128.       manual for a list of error values and their meanings.
  129.  
  130.       2.  Non-negative values when returning data (eg: SioLine).
  131.  
  132.       3.  Zero otherwise.
  133.  
  134.       When debugging an application, be sure to test all return values.
  135.       Use SioError to print the associated text for errors.
  136.  
  137.       Example Code Segment
  138.  
  139.  
  140.       +---------------------------------------------------------------+
  141.       | int Code;                 /* MUST be 'int', not 'char' */     |
  142.       |                                                               |
  143.       | Code = SioFunction( );    /* any PCL4C function */            |
  144.       | if(Code<0)                                                    |
  145.       |   {/* error returned */                                       |
  146.       |    SioError(Code);        /* SioError prints error text */    |
  147.       |    SioDone(Port);         /* always call SioDone last */      |
  148.       |    exit(1);                                                   |
  149.       |   }                                                           |
  150.       | /* no errors */                                               |
  151.       | ...your application code...                                   |
  152.       |                                                               |
  153.       +---------------------------------------------------------------+
  154.  
  155.  
  156.       For more examples, examine each of the example programs provided
  157.       (MINIMAL.C, SIMPLE.C, LOGIN.C, DOOR.C, SPAWN.C, SELFTEST.C, etc.) in
  158.       the distribution archive. 32-bit users should examine SIMPLE32.C and
  159.       SELF32.C.
  160.  
  161.       You may also wish to examine the TERM.C example program in the
  162.       protocol library (PPL4C).
  163.  
  164.       Refer to the User's Manual (PCL4C.USR) for additional information.
  165.       Also examine the PCL4C.H include file in which library constants are
  166.       defined. 32-bit users should refer to PCL4C32.H.
  167.  
  168.       Note that there are a few differences between the 16-bit & 32-bit
  169.       libraries:
  170.  
  171.       (1) SioRxBuf & SioTxBuf: 32-bit users should pass 0 as the Selector.
  172.       (2) SioStats is available only in 32-bit library.
  173.       (3) SioLoopBack & SioBrkKey are not available in 32-bit library.
  174.  
  175.       Lastly, note that the shareware versions of all our libraries are
  176.       limited to 4 ports (COM1 through COM4), but that the registered
  177.       version can use 20 ports (COM1 through COM20).
  178.  
  179.  
  180.      PCL4C Reference Manual                                    Page 3
  181.  
  182.       +-------------+-----------------------------------------------------+
  183.       |   SioBaud   |  Sets the baud rate of the selected port.           |
  184.       +-------------+-----------------------------------------------------+
  185.  
  186.       Syntax int SioBaud(int Port,int BaudCode)
  187.              /* Port:      Port selected (COM1 - COM16) */
  188.              /* BaudCode:  Baud code */
  189.  
  190.       Remark The SioBaud function sets the baud rate without resetting the
  191.              port. It is used to change the baud rate after calling
  192.              SioReset.
  193.  
  194.                Code   Rate    Name          Code   Rate   Name
  195.                  0     300    Baud300         5    9600   Baud9600
  196.                  1     600    Baud600         6   19200   Baud19200
  197.                  2    1200    Baud1200        7   38400   Baud38400
  198.                  3    2400    Baud2400        8   57600   Baud57600
  199.                  4    4800    Baud4800        9  115200   Baud115200
  200.  
  201.       Return  -4 : No such port. Expect 0 to MaxPort.
  202.              -11 : Bad baud rate code. See above code values.
  203.  
  204.        Other  SioReset
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.       +-------------+-------------+---------------------------+-----------+
  214.       |  SioBrkKey  |  Returns non|0 if ^BREAK was pressed [16|bit only]  |
  215.       +-------------+-------------+---------------------------+-----------+
  216.  
  217.       Syntax int SioBrkKey(void)
  218.  
  219.       Remark The SioBrkKey function returns a TRUE value (non-zero) if the
  220.              Control-BREAK key was pressed, else it returns a zero. Use
  221.              SioBrkKey as a safety exit from a polling loop. [16-bit lib
  222.              only].
  223.  
  224.       Return -1 : Control-BREAK was pressed.
  225.               0 : Control-BREAK was NOT pressed.
  226.  
  227.        Other SioBrkSig
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.      PCL4C Reference Manual                                    Page 4
  241.  
  242.       +-------------+-----------------------------------------------------+
  243.       |  SioBrkSig  |  Asserts, cancels, or detects BREAK signal.         |
  244.       +-------------+-----------------------------------------------------+
  245.  
  246.       Syntax int SioBrkSig(int Port,char Cmd)
  247.              /* Port:  Port selected (COM1 thru COM20) */
  248.              /*  Cmd:  ASSERT ('A'), CANCEL ('C'), or DETECT ('D')*/
  249.  
  250.       Remark The SioBrkSig function controls the BREAK bit in the line
  251.              status register. The legal commands are:
  252.  
  253.              ASSERT_BREAK ('A') : to assert BREAK
  254.              CANCEL_BREAK ('C') : to cancel BREAK
  255.              DETECT_BREAK ('D') : to detect BREAK
  256.  
  257.              ASSERT_BREAK, CANCEL_BREAK, and DETECT_BREAK are defined in
  258.              PCL4C.H.
  259.  
  260.              SioBreak is often used by one side to signal the other than an
  261.              error condition has occurred.
  262.  
  263.       Return -2 : Port not enabled. Call SioReset first.
  264.              -4 : No such port. Expect 0 to MaxPort.
  265.              -6 : Illegal command. Expected 'A', 'C', or 'D'.
  266.              >0 : BREAK signal detected (DETECT command only)
  267.  
  268.        Other SioBrkKey
  269.  
  270.  
  271.       +-------------+-----------------------------------------------------+
  272.       |   SioCTS    |  Reads the Clear to Send (CTS) modem status bit.    |
  273.       +-------------+-----------------------------------------------------+
  274.  
  275.       Syntax int SioCTS(int Port)
  276.              /* Port: Port selected (COM1 thru COM20) */
  277.  
  278.       Remark The SioCTS function is used to read the Clear to Send (CTS)
  279.              modem status bit.
  280.  
  281.              The CTS line is used by some error correcting modems to
  282.              implement hardware flow control.  CTS is dropped by the modem
  283.              to signal the computer not to send data and is raised to
  284.              signal the computer to continue.
  285.  
  286.              See the User's Manual for a discussion of flow control.
  287.  
  288.       Return -2 : Port not enabled. Call SioReset first.
  289.              -4 : No such port.  Expect 0 to MaxPort.
  290.               0 : CTS is clear.
  291.              >0 : CTS is set.
  292.  
  293.        Other SioFlow, SioDSR, SioRI, SioDCD, and SioModem.
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.      PCL4C Reference Manual                                    Page 5
  301.  
  302.       +-------------+-----------------------------------------------------+
  303.       |   SioDCD    |  Reads the Data Carrier Detect (DCD) modem staus bit|
  304.       +-------------+-----------------------------------------------------+
  305.  
  306.       Syntax int SioDCD(int Port)
  307.              /* Port: Port selected (COM1 thru COM20) */
  308.  
  309.       Remark The SioDCD function is used to read the Data Carrier Detect
  310.              (DCD) modem status bit. Also see SioModem.
  311.  
  312.       Return -2 : Port not enabled. Call SioReset first.
  313.              -4 : No such port.  Expect 0 to MaxPort.
  314.               0 : DCD is clear.
  315.              >0 : DCD is set.
  316.  
  317.        Other SioDSR, SioCTS, SioRI, and SioModem.
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.       +-------------+-----------------------------------------------------+
  327.       |   SioDelay  |  Delays one or more timer tics.                     |
  328.       +-------------+-----------------------------------------------------+
  329.  
  330.       Syntax int SioDelay(int Tics)
  331.              /* Tics: # timer tics to delay */
  332.  
  333.       Remark The SioDelay function is used to delay one or more timer
  334.              tics, where each timer tic is approximately 55 milliseconds
  335.              (18.2 tics to the second). Be carefull calling SioDelay since
  336.              it will not return until the specified delay has occurred.
  337.  
  338.       Return zero.
  339.  
  340.        Other SioTimer
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.      PCL4C Reference Manual                                    Page 6
  361.  
  362.       +-------------+-----------------------------------------------------+
  363.       |   SioDone   |  Terminates further serial processing.              |         *
  364.       +-------------+-----------------------------------------------------+
  365.  
  366.       Syntax int SioDone(int Port)
  367.              /* Port: Port selected (COM1 thru COM20) */
  368.  
  369.       Remark The SioDone function terminates further serial processing.
  370.              SioDone MUST be called before exiting your application so that
  371.              interrupts can be restored to their original state. Failure to
  372.              do this can crash the operating system.  If you forget to call
  373.              SioDone before exiting, be sure to re-boot your computer.  You
  374.              can call SioDone even if SioReset has not been called, so it
  375.              is good practice to always call SioDone before exiting your
  376.              application.
  377.  
  378.              Also note that SioDone de-references the transmit and receive
  379.              buffers set up by SioRxBuf and SioTxBuf.  However, it does NOT
  380.              free the transmit and receive buffers.  It is good practice to
  381.              free the transmit and receive buffers (after calling SioDone)
  382.              if they were allocated by malloc (or fmalloc).
  383.  
  384.        Return -2 : Port not enabled. Call SioReset first.
  385.               -4 : No such port. Expect 0 to MaxPort.
  386.  
  387.         Other SioReset.
  388.  
  389.  
  390.  
  391.  
  392.       +-------------+-----------------------------------------------------+
  393.       |    SioDSR   |  Reads the Data Set Ready (DSR) modem status bit.   |         *
  394.       +-------------+-----------------------------------------------------+
  395.  
  396.       Syntax int SioDSR(int Port)
  397.              /* Port: Port selected (COM1 thru COM20) */
  398.  
  399.       Remark The SioDSR function is used to read the Data Set Ready (DSR)
  400.              modem status bit. The DSR line is typically used by the serial
  401.              device (such as a modem) to indicate that it is connected.
  402.  
  403.       Return -2 : Port not enabled. Call SioReset first.
  404.              -4 : No such port.  Expect 0 to MaxPort.
  405.               0 : DSR is clear.
  406.              >0 : DSR is set
  407.  
  408.        Other SioCTS, SioRI, SioDCD, and SioModem
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.      PCL4C Reference Manual                                    Page 7
  421.  
  422.       +-------------+-----------------------------------------------------+
  423.       |    SioDTR   |  Set, clear, or read Data Terminal Ready (DTR)  bit.|
  424.       +-------------+-----------------------------------------------------+
  425.  
  426.       Syntax int SioDTR(int Port,char Cmd)
  427.              /* Port: Port selected (COM1 thru COM20) */
  428.              /*  Cmd:  DTR command (SET, CLEAR, or READ) */
  429.  
  430.       Remark The SioDTR function controls the Data Terminal Ready (DTR) bit
  431.              in the modem control register.  The DTR line is typically used
  432.              by your program to tell the serial device that you are
  433.              connected. DTR should always be set when communicating with a
  434.              modem. Commands (defined in PCL4C.H) are:
  435.  
  436.                   SET_LINE ('S') : to set DTR (ON)
  437.                 CLEAR_LINE ('C') : to clear DTR (OFF)
  438.                  READ_LINE ('R') : to read DTR
  439.  
  440.       Return -2 : Port not enabled. Call SioReset first.
  441.              -4 : No such port. Expect 0 to MaxPort.
  442.              -5 : Not one of 'S', 'C', or 'R'.
  443.               0 : DTR is OFF (READ_LINE Command).
  444.              >0 : DTR is ON (READ_LINE Command).
  445.  
  446.        Other SioRTS.
  447.  
  448.  
  449.  
  450.  
  451.  
  452.       +-------------+-----------------------------------------------------+
  453.       |   SioError  |  Displays error in text.                            |
  454.       +-------------+-----------------------------------------------------+
  455.  
  456.       Syntax int SioError(int Code)
  457.              /* Code: PCL4C error code */
  458.  
  459.       Remark The SioError function displays the error in text corresponding
  460.              to the error code returned from a PCL4C function. During
  461.              development of a communications application, it is a good idea
  462.              to always test return codes, and print out their descriptions
  463.              with SioError [the 32-bit lib uses file SioError.c].
  464.  
  465.       Return zero.
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.      PCL4C Reference Manual                                    Page 8
  481.  
  482.       +-------------+-----------------------------------------------------+
  483.       |   SioFIFO   |  Sets the FIFO trigger level (16550 UART only).     |
  484.       +-------------+-----------------------------------------------------+
  485.  
  486.       Syntax int SioFIFO(int Port,int LevelCode)
  487.              /* Port:      Port selected (COM1 thru COM20) */
  488.              /* LevelCode: FIFO level code (see below) */
  489.  
  490.       Remark The SioFIFO function is used to enable both transmit and
  491.              receive FIFOs for 16550 UARTS, and to set the trigger level at
  492.              which receive interrupts are generated.
  493.  
  494.              For example, if the FIFO level is set to 8, then the 16550
  495.              UART will not generate an interrupt until 8 bytes have been
  496.              received.  This reduces the number of interrupts generated and
  497.              allows faster processing with slower machines or when running
  498.              simultaneous ports.
  499.  
  500.              To test for a 16550 UART, call SioFIFO with a LevelCode of
  501.              other than FIFO_OFF. SioFIFO can be called for the 8250 and
  502.              16450 UART without ill effect.
  503.  
  504.              Level code: FIFO_OFF, LEVEL_1, LEVEL_4, LEVEL_8, LEVEL_14.
  505.  
  506.       Return -2 : Port not enabled. Call SioReset first.
  507.              -4 : No such port.  Expect 0 to MaxPort.
  508.              >0 : FIFO level set.
  509.               0 : FIFO level not set (not 16550).
  510.  
  511.       +------------+------------------------------------------------------+
  512.       |   SioFlow  |  Sets hardware (RTS/CTS) flow control.               |
  513.       +------------+------------------------------------------------------+
  514.  
  515.       Syntax int SioFlow(int Port,int Tics)
  516.              /* Port: Port selected (COM1 thru COM20) */
  517.              /* Tics: # tics before timeout */
  518.  
  519.       Remark The SioFlow function is used to enable or disable hardware
  520.              flow control.  Hardware flow control uses RTS and CTS to
  521.              control data flow between the modem and the computer. Refer to
  522.              the User's Manual for a discussion of flow control. To enable
  523.              hardware flow control, call SioFlow with Flag >= 0.
  524.  
  525.              "Tics" is the number of timer tics (18.2 per second) before a
  526.              call to SioPutc or SioPuts will time out because CTS was not
  527.              set.
  528.  
  529.              Flow control is disabled after resetting a port.  To
  530.              explicitly disable hardware flow control, call SioFlow with
  531.              Tics=-1.
  532.  
  533.       Return -2 : Port not enabled. Call SioReset first.
  534.              -4 : No such port.  Expect 0 to MaxPort.
  535.              =0 : Flow control disabled.
  536.              >0 : Flow control enabled.
  537.  
  538.        Other SioPutc and SioPuts
  539.  
  540.      PCL4C Reference Manual                                    Page 9
  541.  
  542.       +------------+------------------------------------------------------+
  543.       |   SioGetc  |  Reads the next character from the serial line.      |
  544.       +------------+------------------------------------------------------+
  545.  
  546.       Syntax int SioGetc(int Port,int Tics)
  547.              /* Port: Port selected (COM1 thru COM20) */
  548.              /* Tics: Timeout */
  549.  
  550.       Remark The SioGetc function reads a byte from the selected serial
  551.              port.  The function will wait for the number of system tics
  552.              given by the 'Tics' argument before returning 'timed out'.
  553.              There are 18.2 tics to the second.
  554.  
  555.       Return -2 : Port not enabled. Call SioReset first.
  556.              -4 : No such port. Expect 0 to MaxPort.
  557.              -1 : If timed out.
  558.              >0 : Character read.
  559.  
  560.        Other SioUnGetc and SioPutc.
  561.  
  562.  
  563.       +---------------+---------------------------------------------------+
  564.       |   SioGetDiv   |  Reads the baud rate divisor.                     |
  565.       +---------------+---------------------------------------------------+
  566.  
  567.       Syntax int SioGetDiv(int Port)
  568.              /* Port: Port selected (COM1 thru COM20) */
  569.  
  570.  
  571.       Remark The SioGetDiv function reads the baud rate divisor. The baud
  572.              rate can then be determined from the divisor by using the
  573.              following table:
  574.  
  575.              Baud  Divisor    Baud  Divisor    Baud  Divisor
  576.  
  577.               300   0180      4800   0018     38400   0003
  578.              1200   0060      9600   000C     57600   0002
  579.              2400   0030     19200   0006    115200   0001
  580.  
  581.       Return -2 : Port not enabled. Call SioReset first.
  582.              -4 : No such port. Expect 0 to MaxPort.
  583.              >0 : Baud rate divisor.
  584.  
  585.        Other SioParms.
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.      PCL4C Reference Manual                                    Page 10
  601.  
  602.       +------------+------------------------------------------------------+
  603.       |   SioGets  |  Receive a buffer from the serial line.              |
  604.       +------------+------------------------------------------------------+
  605.  
  606.       Syntax int SioGets(int Port,char *Buffer,int Length)
  607.              /* Port: Port selected (COM1 thru COM20) */
  608.              /* Buffer: Character buffer */
  609.              /* Length: Length of Buffer (# of requested bytes) */
  610.  
  611.       Remark  The SioGets function reads bytes from the selected serial
  612.              port.  This function will read either the number of requested
  613.              bytes or read fewer if no character is immediately available.
  614.              SioGets cannot return more characters than are in the receive
  615.              buffer at the time it is called. The number of characters
  616.              actually read is returned.
  617.  
  618.       Return -2 : Port not enabled. Call SioReset first.
  619.              -4 : No such port. Expect 0 to MaxPort.
  620.              -1 : If timed out.
  621.              >0 : Number of characters read into Buffer.
  622.  
  623.        Other SioUnGetc and SioGetc.
  624.  
  625.  
  626.  
  627.  
  628.  
  629.       +-------------+-----------------------------------------------------+
  630.       |   SioInfo   |  Return PCL4C library information.                  |
  631.       +-------------+-----------------------------------------------------+
  632.  
  633.       Syntax int SioInfo(char Cmd)
  634.              /* Cmd: Command (see below) */
  635.  
  636.       Remark  The SioInfo function returns a word value depending on the
  637.              character argument in the table below.  This function is
  638.              usefull for understanding what the hardware is doing.  Note
  639.              that the command argument is case sensitive. The 32-bit lib
  640.              only returns the version number. See SioStats for 32-bit info.
  641.  
  642.                 Info Codes
  643.  
  644.                 'V' : Version [as hex byte XY means version X.Y]
  645.                 'I' : TRUE if library compiled with TX interrupts enabled.
  646.                 'M' : Memory model (0=small,1=compact,2=medium,3=large)
  647.                 'P' : TRUE if compiled for protected mode.
  648.                 'T' : Total (over all ports) transmitter interrupts.
  649.                 'R' : Total (over all ports) receiver interrupts.
  650.                 'd' : Total (over all ports) times RTS dropped.
  651.                 'r' : Total (over all ports) times RTS raised.
  652.                 'c' : Total (over all ports) times CTS drop detected.
  653.  
  654.       Return  -1 : Function argument not recognized.
  655.              >=0 : Value as per above table.
  656.  
  657.        Other SioStats
  658.  
  659.  
  660.      PCL4C Reference Manual                                    Page 11
  661.  
  662.       +-------------+-----------------------------------------------------+
  663.       |    SioIRQ   |  Assigns an IRQ line to a port.                     |
  664.       +-------------+-----------------------------------------------------+
  665.  
  666.       Syntax int SioIRQ(int Port,intIRQcode)
  667.              /* Port:    Port selected (COM1 thru COM20) */
  668.              /* IRQcode: IRQ number [IRQ2..IRQ15] */
  669.  
  670.       Remark The SioIRQ function assigns an IRQ line to a po7rt.  That is,
  671.              SioIRQ maps an IRQ to a port.  SioIRQ (like SioUART) must be
  672.              called before calling SioReset. Unless you have a non-standard
  673.              (COM1 & COM3 use IRQ4 while COM2 & COM4 use IRQ3) serial port
  674.              configuration (or don't want to run more than 2 ports
  675.              concurrently), you will not need to call SioIRQ. You should be
  676.              EXTREMELY careful with SioIRQ as it can lock your machine up
  677.              if given incorrect information.
  678.  
  679.              In particular, remember that your port hardware must generate
  680.              the interrupt that you have specified.  You should refer to
  681.              your serial board hardware manual for specfic instructions in
  682.              configuring your hardware.  Be sure to call SioPorts first to
  683.              setup DigiBoard ports if you have them. Refer to the PCL4C
  684.              Users Manual for additional information.
  685.  
  686.       Return -4 : No such port. Expect 0 to MaxPort.
  687.              15 : Port already enabled.  SioReset has already been called.
  688.             -17 : No such IRQ.
  689.             -18 : ISR limit (maximum of 4 PC IRQs) exceeded.
  690.               0 : Otherwise
  691.  
  692.        Other SioUART and SioPorts.
  693.  
  694.       +-------------+-----------------------------------------------------+
  695.       |   SioLine   |  Reads the line status register.                    |
  696.       +-------------+-----------------------------------------------------+
  697.  
  698.       Syntax int SioLine(int Port)
  699.              /* Port: Port selected (COM1 thru COM20) */
  700.  
  701.       Remark  The SioLine function reads the line status register.  The
  702.              individual bit masks are as follows:
  703.  
  704.                      0x40  = Transmitter empty.
  705.                      0x20  = Transmitter buffer empty.
  706.                      0x10  = Break detected.
  707.                      0x08  = Framming error.
  708.                      0x04  = Parity error.
  709.                      0x02  = Overrun error.
  710.                      0x01  = Data ready.
  711.  
  712.       Return -2 : Port not enabled. Call SioReset first.
  713.              -4 : No such port. Expect 0 to MaxPort.
  714.              >0 : Line status (rightmost byte of word).
  715.  
  716.        Other SioModem.
  717.  
  718.  
  719.  
  720.      PCL4C Reference Manual                                    Page 12
  721.  
  722.       +-------------+--------------------------------+--------------------+
  723.       | SioLoopBack |  Does a UART loopback test. [16|bit lib only]       |
  724.       +-------------+--------------------------------+--------------------+
  725.  
  726.       Syntax int SioLoopBack(int Port)
  727.              /* Port: Port selected (COM1 thru COM20) */
  728.  
  729.       Remark SioLoopBack makes use of the built in loopback test capability
  730.              of the INS8250 family UART.  Normally SioLoopBack will never
  731.              need to be called unless you suspect that your UART is bad.
  732.              Many UARTs must be reset after running a loopback test.
  733.  
  734.       Return 0 : Loopback test is successfull.
  735.             -2 : Port not enabled. Call SioReset first.
  736.             -4 : No such port.  Expect 0 to MaxPort.
  737.            -12 : Loopback test fails.
  738.  
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.  
  746.       +-------------+------------------------------------------------------+
  747.       |   SioModem  |  Reads the modem status register.                    |
  748.       +-------------+------------------------------------------------------+
  749.  
  750.       Syntax int SioModem(int Port, int Mask)
  751.              /* Port: Port selected (COM1 thru COM20) */
  752.              /* Mask: Modem function mask */
  753.  
  754.       Remark  The SioModem function reads the modem register.  The bit
  755.              definitions for the function mask are as follows:
  756.  
  757.              Bit Name  Function            Bit  Name      Function
  758.               7  DCD   Data Carrier Detect  3  DeltaDCD  DCD has changed
  759.               6  RI    Ring Indicator       2  DeltaRI   RI has changed
  760.               5  DSR   Data Set Ready       1  DeltaDSR  DSR has changed
  761.               4  CTS   Clear To Send        0  DeltaCTS  CTS has changed
  762.  
  763.              Bits 4 through 7 represent the absolute state of their
  764.              respective RS-232 inputs.  Bits 0 through 3 represent a change
  765.              in the state of their respective RS-232 inputs since last
  766.              read. Once UART register 3 is read, the Delta bits are
  767.              cleared.  Thus, it is best not to depend on the Delta bits.
  768.  
  769.       Return -2 : Port not enabled. Call SioReset first.
  770.              -4 : No such port. Expect 0 to MaxPort.
  771.              >0 : Modem status (rightmost byte of word).
  772.  
  773.        Other SioCTS, SioDCD, SioDSR and SioRI.
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.      PCL4C Reference Manual                                    Page 13
  781.  
  782.       +-------------+-----------------------------------------------------+
  783.       |  SioParms   |  Sets parity, stop bits, and word length.           |
  784.       +-------------+-----------------------------------------------------+
  785.  
  786.       Syntax int SioParms(int Port,int Parity,int StopBits,int DataBits)
  787.              /* Port:     Port selected (COM1 - COM16) */
  788.              /* Parity:   Parity code [0,1,2] */
  789.              /* StopBits: Stop bits code [0,1] */
  790.              /* DataBits: Word length code [0,1,2,3] */
  791.  
  792.       Remark The SioParms function sets the parity, stop bits, and data
  793.              length. If the default parity (none), stop bits (1), or word
  794.              length (8) is not acceptable, then they can be changed by
  795.              calling SioParms.  SioParms can be called either before or
  796.              after calling SioReset. See file PCL4C.H.
  797.  
  798.              Parity codes:   NoParity, OddParioty, EvenParity.
  799.              StopBits codes: OneStopBit, TwoStopBits.
  800.              DataBits codes: WordLength7, WordLength8.
  801.  
  802.       Return -4 : No such port. Expect 0 to MaxPort.
  803.              -7 : Bad parity code selected. Expecting  0 to 2.
  804.              |8 : Bad stop bits code. Expecting  0 or 1.
  805.              -9 : Bad word length code. Expecting  0 to 3.
  806.  
  807.        Other SioReset.
  808.  
  809.       +-------------+-----------------------------------------------------+
  810.       |  SioPorts   |  Sets number of PC & Digiboard / BOCA Board ports.  |
  811.       +-------------+-----------------------------------------------------+
  812.  
  813.       Syntax int SioPorts(int Ports,int FirstPort,int Status,int Code)
  814.              /* Ports:     Total number of ports */
  815.              /* FirstPort: First DigiBoard or BOCA port */
  816.              /* Status:    DigiBoard Status Register */
  817.              /* Code:      PC_PORTS, DIGIBOARD, or BOCABOARD */
  818.  
  819.       Remark  The SioPorts function must be called before ANY other serial
  820.              functions.  The purpose of the SioPorts function is to set the
  821.              total number of ports, the first DigiBoard (or BOCA board)
  822.              port and the DigiBoard (or BOCA board) status register
  823.              address.
  824.  
  825.              Once SioPorts is called, all COM ports starting with
  826.              "FirstPort" will be treated as DigiBoard (or BOCA board)
  827.              ports.  The default setup is 4 standard PC ports and no
  828.              DigiBoard or BOCA ports [ SioPorts(4,4,0,PC_PORTS) ].
  829.  
  830.              Refer to ther PCL4C users manual for more information on the
  831.              DigiBoard and BOCA board.  Many other multiport boards are
  832.              functionally equivalent to either the DigiBoard or the BOCA
  833.              board.
  834.  
  835.       Return -4 : No such port. Expect 0 to 9.
  836.               0 : No error (sets MaxPort to NumberPorts-1).
  837.  
  838.        Other SioUART, SioIRQ, and Code Examples.
  839.  
  840.      PCL4C Reference Manual                                    Page 14
  841.  
  842.       +-------------+-----------------------------------------------------+
  843.       |   SioPutc   |  Transmit a character over a serial line.           |
  844.       +-------------+-----------------------------------------------------+
  845.  
  846.       Syntax int SioPutc(int Port,char Ch)
  847.              /* Port: Port selected (COM1 thru COM20) */
  848.              /* Ch:   Character to send */
  849.  
  850.       Remark The SioPutc function transmits one character. If flow control
  851.              has been enabled, then SioPutc may return a -1 (time out) if
  852.              the number of tics specified in the SioFlow function was
  853.              exceeded waiting for the modem to raise CTS.
  854.  
  855.              If transmitter interrupts are enabled, SioPutc returns a -1 if
  856.              the transmit buffer is already full.  Otherewise the byte is
  857.              placed in the transmit buffer, awaiting transmission by the
  858.              PCL4C interrupt service routine. If transmitter interrupts are
  859.              not enabled, the byte is loaded directly into the UART
  860.              transmit buffer.
  861.  
  862.       Return -2 : Port not enabled. Call SioReset first.
  863.              -4 : No such port. Expect 0 to MaxPort.
  864.              -1 : Timed out waiting for CTS (flow control enabled), or
  865.                   transmit buffer already full.
  866.  
  867.        Other SioPuts, SioFlow, and SioTxFlush.
  868.  
  869.       +-------------+-----------------------------------------------------+
  870.       |   SioPuts   |  Transmit a buffer over a serial line.              |
  871.       +-------------+-----------------------------------------------------+
  872.  
  873.       Syntax int SioPuts(int Port,char *Buffer,int Length)
  874.              /* Port: Port selected (COM1 thru COM20) */
  875.              /* Buffer: Character buffer */
  876.              /* Length: Length of Buffer */
  877.  
  878.       Remark The SioPuts function transmits each buffer character over the
  879.              selected serial line.  The number of characters actually
  880.              transmitted is returned. This function can take a long time
  881.              for large buffers if transmitter interrupts are not enabled!
  882.  
  883.              If flow control has been enabled, then SioPuts may transmit
  884.              fewer characters than requested if the number of tics
  885.              specified in the SioFlow function was exceeded waiting for the
  886.              modem to raise CTS.
  887.  
  888.              If transmitter interrupts are enabled, SioPuts will transmit
  889.              fewer than the number of characters requested if the transmit
  890.              buffer would overflow. The actual number of characters
  891.              transmitted is returned.
  892.  
  893.       Return -2 : Port not enabled. Call SioReset first.
  894.              -4 : No such port. Expect 0 to MaxPort.
  895.              >=0: Number of characters actually transmitted.
  896.  
  897.        Other SioPutc, SioFlow, and SioTxFlush.
  898.  
  899.  
  900.      PCL4C Reference Manual                                    Page 15
  901.  
  902.       +-------------+-----------------------------------------------------+
  903.       |   SioRead   |  Reads any UART register.                           |
  904.       +-------------+-----------------------------------------------------+
  905.  
  906.       Syntax int SioRead(int Port,int Reg)
  907.              /* Port: Port selected (COM1 thru COM20) */
  908.              /* Reg:  UART register (0 to 7) */
  909.  
  910.       Remark The SioReset function directly reads the contents of any of
  911.              the 7 UART registers.  This function is useful when debugging
  912.              application programs and as a method for verifying UART
  913.              contents.
  914.  
  915.              The line status register (register 5) can also be read with
  916.              SioLine while the modem status register (register 6) can also
  917.              be read with SioModem.
  918.  
  919.       Return -3 : No buffer available. Call SioRxBuf first.
  920.              -4 : No such port. Expect 0 to MaxPort.
  921.  
  922.        Other SioLine and SioModem.
  923.  
  924.       +-------------+------------------------------------------------------+
  925.       |  SioReset   |  Initialize a serial port for processing.            |
  926.       +-------------+------------------------------------------------------+
  927.  
  928.       Syntax int SioReset(int Port,int BaudCode)
  929.              /* Port:     Port selected (COM1 thru COM20) */
  930.              /* BaudCode: Baud code or -1 */
  931.  
  932.       Remark The SioReset function initializes the selected serial port.
  933.              SioReset should be called after calling SioParm and SioRxBuf
  934.              but before making any other calls to PCL4C. SioReset uses the
  935.              parity, stop bits, and word length value previously set if
  936.              SioParm was called, otherwise the default values (see SioParm)
  937.              are used.
  938.  
  939.              Recall that COM1 and COM3 share the same interrupt vector and
  940.              therefore cannot operate simultaneously. Similiarly, COM2 and
  941.              COM4 cannot operate simultaneously. Any other combination of
  942.              two ports can be used.
  943.  
  944.              By specifing NORESET (-1) for the baud rate code, the port
  945.              will NOT be reset.  This is used to "take over" a port from a
  946.              host communications program that allows a "DOS gateway".
  947.              External protocols can be implemented this way.
  948.  
  949.       Return  -3 : No buffer available. Call SioRxBuf first.
  950.               -4 : No such port. Expect 0 to MaxPort.
  951.              -11 : Bad baud rate code selected. Expecting  0 to 9.
  952.              |13 : UART undefined. SioUART(Port,0) was called.
  953.              |14 : Bad or missing UART. Hardware may not be present.
  954.              |15 : Port already enabled. SioReset was already called.
  955.              -16 : Interrupt already in use.
  956.              >=0 : Port has been reset. Return value is line status.
  957.  
  958.        Other SioBaud, SioParms, SioRxBuf, SioTxBuf, SioDone & SioUART.
  959.  
  960.      PCL4C Reference Manual                                    Page 16
  961.  
  962.       +-------------+-----------------------------------------------------+
  963.       |    SioRI    |  Reads the Ring Indicator (RI) modem status.        |
  964.       +-------------+-----------------------------------------------------+
  965.  
  966.       Syntax int SioRI(int Port)
  967.              /* Port: Port selected (COM1 thru COM20) */
  968.  
  969.       Remark The SioRI function is used to read the Ring Indicator (RI)
  970.              modem status bit. Also see SioModem.
  971.  
  972.       Return -2 : Port not enabled. Call SioReset first.
  973.              -4 : No such port.  Expect 0 to MaxPort.
  974.               0 : RI is clear.
  975.              >0 : RI is set (RING has occurred).
  976.  
  977.        Other SioDSR, SioCTS, SioDCD, and SioModem.
  978.  
  979.  
  980.  
  981.  
  982.       +-------------+-----------------------------------------------------+
  983.       |    SioRTS   |  Sets, clears, or reads Request to Send (RTS) line. |
  984.       +-------------+-----------------------------------------------------+
  985.  
  986.       Syntax int SioRTS(Port, char Cmd)
  987.              /* Port: Port selected (COM1 thru COM20) */
  988.              /* Cmd:  RTS command (SET, CLEAR, or READ) */
  989.  
  990.       Remark The SioRTS function controls the Request to Send (RTS bit
  991.              in the modem control register.
  992.  
  993.              The RTS line is used by most error correcting modems to
  994.              implement hardware flow control.  RTS is dropped by the
  995.              computer to signal the modem not to send data, and is raised
  996.              to signal the modem to continue.  RTS should be set when
  997.              communicating with a modem unless Flow Control is being used.
  998.  
  999.              Refer to the User's Manual for a discussion of flow control.
  1000.              Commands (defined in PCL4C.H) are:
  1001.  
  1002.                   SET_LINE ('S') : set RTS (ON)
  1003.                 CLEAR_LINE ('C') : clear RTS (OFF)
  1004.                  READ_LINE ('R') : read RTS
  1005.  
  1006.       Return -2 : Port not enabled. Call SioReset first.
  1007.              -4 : No such port. Expect 0 to MaxPort.
  1008.              -5 : Command is not one of 'S', 'C', or 'R'.
  1009.               0 : RTS is OFF (READ_LINE Command).
  1010.              >0 : RTS is ON  (READ_LINE Command).
  1011.  
  1012.        Other SioFlow and SioDTR.
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.      PCL4C Reference Manual                                    Page 17
  1021.  
  1022.       +------------+------------------------------------------------------+
  1023.       |  SioRxBuf  |  Sets up receive buffers.                            |
  1024.       +------------+------------------------------------------------------+
  1025.  
  1026.       Syntax int SioRxBuf(int Port,int Selector,SizeCode)
  1027.              /* Port:     Port selected (COM1 thru COM20) */
  1028.              /* Selector: Receive buffer segment [selector for PM] */
  1029.              /* SizeCode: Buffer size code */
  1030.  
  1031.       Remark The SioRxBuf function passes the address segment and size of
  1032.              the receive buffer to PCL4C.  Recall that PCL4C requires a
  1033.              receive buffer for each port in simultaneous operation since
  1034.              the receive function is interrupt driven.  It must be called
  1035.              before any incoming characters can be received. SioRxBuf must
  1036.              be called before SioReset.  Buffer size codes are listed in
  1037.              "PCL4C.H". [Pass 0 for Selector in 32-bit programs].
  1038.  
  1039.                 Size Code       Buffer Size    PCL4C.H Name
  1040.                    4            128 bytes        Size128
  1041.                    5            256 bytes        Size256
  1042.                    6            512 bytes        Size512
  1043.                    7           1024 bytes        Size1024 or Size1K
  1044.                    8           2048 bytes        Size2048 or Size2K
  1045.                    9           4096 bytes        Size4096 or Size4K
  1046.                   10           8192 bytes        Size8192 or Size8K
  1047.                   11          16384 bytes        Size16384 or Size16K
  1048.                   12          32768 bytes        Size32768 or Size32K
  1049.  
  1050.       Return -4 : No such port. Expect 0 to MaxPort.
  1051.             -10 : Bad buffer size code. Expecting 0 to 11.
  1052.  
  1053.        Other SioReset, SioTxBuf and Code Examples.
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.       +------------+------------------------------------------------------+
  1060.       | SioRxClear |  Cleares (clears) the receive buffer.                |
  1061.       +------------+------------------------------------------------------+
  1062.  
  1063.       Syntax int SioRxClear(int Port)
  1064.              /* Port: Port selected (COM1 thru COM20) */
  1065.  
  1066.       Remark The SioRxClear function will delete any characters in the
  1067.              receive buffer for the specified port.  After execution, the
  1068.              receive buffer will be empty.  Call SioRxBuf after resetting a
  1069.              port in order to delete any spurious characters.
  1070.  
  1071.       Return -2 : Port not enabled. Call SioReset first.
  1072.              -4 : No such port. Expect 0 to MaxPort.
  1073.  
  1074.        Other SioRxQue.
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.      PCL4C Reference Manual                                    Page 18
  1081.  
  1082.       +-------------+-----------------------------------------------------+
  1083.       |  SioRxQue   |  Returns the number of bytes in the receive queue.  |
  1084.       +-------------+-----------------------------------------------------+
  1085.  
  1086.       Syntax int SioRxQue(int Port)
  1087.              /* Port: Port selected (COM1 thru COM20) */
  1088.  
  1089.       Remark  The SioRxQue function will return the number of characters in
  1090.              the receive queue at the time of the call. It can be used to
  1091.              implement XON/XOFF flow control.
  1092.  
  1093.       Return -2 : Port not enabled. Call SioReset first.
  1094.              -4 : No such port. Expect 0 to MaxPort.
  1095.  
  1096.        Other SioRxClear.
  1097.  
  1098.  
  1099.  
  1100.  
  1101.       +-----------+--------------------------------------+----------------+
  1102.       | SioStats  |  Return PCL4C library information (32|bit ONLY)       |
  1103.       +-----------+--------------------------------------+----------------+
  1104.  
  1105.       Syntax int SioStats(Port,Cmd)
  1106.              /* Port:  Port selected (COM1 thru COM20) */
  1107.              /* Cmd:   Command (see below) */
  1108.  
  1109.       Remark  The SioStats function returns a word value depending on the
  1110.              character argument in the table below.  This function is
  1111.              usefull for understanding what the hardware is doing.  Note
  1112.              that the command argument is case sensitive.
  1113.  
  1114.                 Info Codes
  1115.  
  1116.                 'T' : Total transmitter interrupts.
  1117.                 'R' : Total receiver interrupts.
  1118.                 'K' : # bytes kickstarted.
  1119.                 'C' : # bytes transmitted.
  1120.                 'd' : Total times RTS dropped.
  1121.                 'r' : Total times RTS raised.
  1122.                 'c' : Total times CTS drop detected.
  1123.  
  1124.       Return -1 : Function argument not recognized.
  1125.             >=0 : Value as per above table.
  1126.        Other SioInfo
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.      PCL4C Reference Manual                                    Page 19
  1141.  
  1142.       +------------+------------------------------------------------------+
  1143.       |  SioTimer  |  Returns the number of system clock tics.            |
  1144.       +------------+------------------------------------------------------+
  1145.  
  1146.       Syntax long SioTimer(void)
  1147.  
  1148.       Remark The SioTimer function will return the number of system clock
  1149.              tics since midnight, at 18.2065 tics per second. This function
  1150.              is usefull for timing various functions.
  1151.  
  1152.        Other SioDelay
  1153.  
  1154.  
  1155.  
  1156.       +------------+------------------------------------------------------+
  1157.       |  SioTxBuf  |  Sets up transmitter buffer.                         |
  1158.       +------------+------------------------------------------------------+
  1159.  
  1160.       Syntax int SioTxBuf(int Port,int Selector,int SizeCode)
  1161.              /* Port:     Port selected (COM1 thru COM20) */
  1162.              /* Selector: Receive buffer segment [selector in PM] */
  1163.              /* SizeCode: Buffer size code */
  1164.  
  1165.  
  1166.       Remark  The SioTxBuf function passes the address segment and size of
  1167.              the transmit buffer to PCL4C, provided that you will link with
  1168.              a PCL4C library with transmitter interrupts enabled. [Pass 0
  1169.              for Selector in 32-bit programs]. SioTxBuf() must be called
  1170.              before SioReset.
  1171.  
  1172.                 Size Code       Buffer Size    PCL4C.H Name
  1173.                    4            128 bytes        Size128
  1174.                    5            256 bytes        Size256
  1175.                    6            512 bytes        Size512
  1176.                    7           1024 bytes        Size1024 or Size1K
  1177.                    8           2048 bytes        Size2048 or Size2K
  1178.                    9           4096 bytes        Size4096 or Size4K
  1179.                   10           8192 bytes        Size8192 or Size8K
  1180.                   11          16384 bytes        Size16384 or Size16K
  1181.                   12          32768 bytes        Size32768 or Size32K
  1182.  
  1183.       Return -4 : No such port. Expect 0 to MaxPort.
  1184.             -10 : Bad buffer size code. Expecting 0 to 11.
  1185.  
  1186.        Other SioRxBuf, SioReset and Code Examples.
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.      PCL4C Reference Manual                                    Page 20
  1201.  
  1202.       +------------+------------------------------------------------------+
  1203.       | SioTxClear |  Cleares (clears) the transmitter buffer.            |
  1204.       +------------+------------------------------------------------------+
  1205.  
  1206.       Syntax int SioTxClear(int Port)
  1207.              /* Port: Port selected (COM1 thru COM20) */
  1208.  
  1209.       Remark The SioTxClear function will delete any characters in the
  1210.              transmit buffer for the specified port, provided that you will
  1211.              link with a PCL4C library with transmitter interrupts enabled.
  1212.              After execution, the transmit buffer will be empty.
  1213.  
  1214.              Once this function is called, any character in the transmit
  1215.              buffer (put there by SioPutc) will be lost and therefore not
  1216.              transmitted. This function is not used unless the transmitter
  1217.              interrupts are enabled Refer to the PCL4C Users Manual for
  1218.              information on transmitter (TX) interrupts.
  1219.  
  1220.       Return -2 : Port not enabled. Call SioReset first.
  1221.              -4 : No such port. Expect 0 to MaxPort.
  1222.  
  1223.        Other SioTxFlush and SioTxQue.
  1224.  
  1225.  
  1226.  
  1227.       +------------+------------------------------------------------------+
  1228.       | SioTxFlush |  Flushes the transmitter buffer.                     |
  1229.       +------------+------------------------------------------------------+
  1230.  
  1231.       Syntax int SioTxFlush(int Port)
  1232.              /* Port: Port selected (COM1 thru COM20) */
  1233.  
  1234.       Remark The SioTxFlush function will re-enable transmitter interrupts
  1235.              if they had been disabled by CTS dropping. This has the effect
  1236.              of forcing all data out of the transmitter queue unless
  1237.              stopped again by CTS going down.
  1238.  
  1239.              Once the transmitter interrupt has been disabled (by CTS going
  1240.              down), then the only way to restart it is by calling one of
  1241.              the serial I/O functions (SioPutc, SioPuts, SioGetc, or
  1242.              SioGets), SioTxQue, or SioTxFlush.
  1243.  
  1244.              The primary purpose of SioTxFlush is to provide an explicit
  1245.              means of restarting transmitter interrupts.
  1246.  
  1247.       Return -2 : Port not enabled. Call SioReset first.
  1248.              -4 : No such port. Expect 0 to MaxPort.
  1249.  
  1250.       Other SioTxQue.
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.      PCL4C Reference Manual                                    Page 21
  1261.  
  1262.       +------------+------------------------------------------------------+
  1263.       |  SioTxQue  |  Returns the number of bytes in the transmit queue.  |
  1264.       +------------+------------------------------------------------------+
  1265.  
  1266.       Syntax int SioTxQue(int Port)
  1267.              /* Port: Port selected (COM1 thru COM20) */
  1268.  
  1269.       Remark The SioTxQue function will return the number of characters in
  1270.              the transmit queue at the time of the call, provided that you
  1271.              will link with a PCL4C library with transmitter interrupts
  1272.              enabled.
  1273.  
  1274.              This function is not used unless the transmitter interrupts
  1275.              are enabled.  Refer to the PCL4C Users Manual for information
  1276.              on transmitter (TX) interrupts.
  1277.  
  1278.       Return -2 : Port not enabled. Call SioReset first.
  1279.             -4 : No such port. Expect 0 to MaxPort.
  1280.  
  1281.        Other SioTxFlush.
  1282.  
  1283.  
  1284.  
  1285.       +------------+------------------------------------------------------+
  1286.       |  SioUART   |  Sets the UART base address.                         |
  1287.       +------------+------------------------------------------------------+
  1288.  
  1289.       Syntax int SioUART(int Port,int Address)
  1290.              /* Port:    Port selected (COM1 thru COM20) */                           int Port;     /* COM1 to COM4 */
  1291.              /* Address: UART address */
  1292.  
  1293.       Remark  The SioUART function sets the UART base address for the
  1294.              specified port.  SioUART must be called before SioReset in
  1295.              order to have effect.  Be extremely sure that you know what
  1296.              you are doing!  Note that PCL4C uses the standard PC/XT/AT
  1297.              port addresses, interrupt request lines, and interrupt service
  1298.              vectors.  Therefore, this function is only needed for
  1299.              non-standard ports.
  1300.  
  1301.       Return >0 : The previous base address for this port.
  1302.              -4 : No such port.  Expect 0 to MaxPort.
  1303.             -15 : Port already enabled.  SioReset has already been called.
  1304.  
  1305.        Other SioPorts, SioIRQ, and SioReset.
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.      PCL4C Reference Manual                                    Page 22
  1321.  
  1322.       +------------+-----+------------------------------------------------+
  1323.       | SioUnGetc  |  "Un|gets" the last character read with SioGetc().   |
  1324.       +------------+-----+------------------------------------------------+
  1325.  
  1326.       Syntax int SioUnGetc(int Port,char Ch)
  1327.              /* Port: Port selected (COM1 thru COM20) */
  1328.              /* Ch:   Character to unget */
  1329.  
  1330.       Remark The SioUnGetc function returns ("pushes") the character back
  1331.              into the serial input buffer.  The character pushed will be
  1332.              the next character returned by SioGetc.  Only one character
  1333.              can be pushed back (except for 32-bit libs). This function
  1334.              works just like the "ungetc" function in the C language.
  1335.  
  1336.       Return -2 : Port not enabled. Call SioReset first.
  1337.              -4 : No such port. Expect 0 to MaxPort.
  1338.  
  1339.        Other SioReset.
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.  
  1347.  
  1348.  
  1349.  
  1350.  
  1351.  
  1352.  
  1353.  
  1354.  
  1355.  
  1356.  
  1357.  
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.      PCL4C Reference Manual                                    Page 23
  1381.  
  1382.                           Function Summary
  1383.  
  1384.  
  1385.  
  1386.       +-------------+----------+----------+----------+----------+
  1387.       | Function    |   Arg1   |   Arg2   |   Arg3   |   Arg4   |
  1388.       +-------------+----------+----------+----------+----------+
  1389.       | SioBaud     | Port     | BaudCode |          |          |
  1390.       | SioBrkKey   |          |          |          |          |
  1391.       | SioBrkSig   | Port     | Cmd      |          |          |
  1392.       | SioCTS      | Port     |          |          |          |
  1393.       | SioDCD      | Port     |          |          |          |
  1394.       | SioDelay    | Tics     |          |          |          |
  1395.       | SioDone     | Port     |          |          |          |
  1396.       | SioDSR      | Port     |          |          |          |
  1397.       | SioDTR      | Port     | Cmd      |          |          |
  1398.       | SioError    | Code     |          |          |          |
  1399.       | SioFIFO     | Port     | LevelCode|          |          |
  1400.       | SioFlow     | Port     | Tics     |          |          |
  1401.       | SioGetc     | Port     | Tics     |          |          |
  1402.       | SioGetDiv   | Port     |          |          |          |
  1403.       | SioGets     | Port     | Buffer   | Length   |          |
  1404.       | SioInfo     | Cmd      |          |          |          |
  1405.       | SioIRQ      | Port     | IRQcode  |          |          |
  1406.       | SioLine     | Port     |          |          |          |
  1407.       | SioLoopBack | Port     |          |          |          |
  1408.       | SioModem    | Port     | Mask     |          |          |
  1409.       | SioParms    | Port     | Parity   | StopBits | DataBits |
  1410.       | SioPorts    | NbrPorts | FirstPort| StatusReg| Code     |
  1411.       | SioPutc     | Port     | Ch       |          |          |
  1412.       | SioPuts     | Port     | Buffer   | Length   |          |
  1413.       | SioRead     | Port     | Reg      |          |          |
  1414.       | SioReset    | Port     | BaudCode |          |          |
  1415.       | SioRI       | Port     |          |          |          |
  1416.       | SioRTS      | Port     | Cmd      |          |          |
  1417.       | SioRxBuf    | Port     | Segment  | SizeCode |          |
  1418.       | SioRxClear  | Port     |          |          |          |
  1419.       | SioRxQue    | Port     |          |          |          |
  1420.       | SioStats    | Port     | Cmd      |          |          |
  1421.       | SioTimer    |          |          |          |          |
  1422.       | SioTxBuf    | Port     | Segment  | SizeCode |          |
  1423.       | SioTxClear  | Port     |          |          |          |
  1424.       | SioTxFlush  | Port     |          |          |          |
  1425.       | SioTxQue    | Port     |          |          |          |
  1426.       | SioUART     | Port     | Address  |          |          |
  1427.       | SioUnGetc   | Port     | Ch       |          |          |
  1428.       +-------------+----------+----------+----------+----------+
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.      PCL4C Reference Manual                                    Page 24
  1441.  
  1442.                           Error Code Summary
  1443.  
  1444.  
  1445.  
  1446.       +------+--------------------------------------------------------+
  1447.       | Code |  Description                                           |
  1448.       +------+--------------------------------------------------------+
  1449.       |   0  |  No error.                                             |
  1450.       |  -1  |  Timeout waiting for I/O.                              |
  1451.       |  |2  |  Port not enabled. Call SioReset first.                |
  1452.       |  |3  |  No buffer available. Call SioRxBuf first.             |
  1453.       |  |4  |  No such port. Expect 0 to MaxPort. (COM1 = 0)         |
  1454.       |  |5  |  Expected 'S', 'C', or 'R' as 2nd argument.            |
  1455.       |  |6  |  Expected 'A', 'C', or 'D' as 2nd argument.            |
  1456.       |  |7  |  Bad parity code specified. Expected 0 to 7.           |
  1457.       |  |8  |  Bad stop bits code specified. Expected 0 or 1.        |
  1458.       |  -9  |  Bad wordlength code specified. Expect 0 to MaxPort.   |
  1459.       | -10  |  Bad buffer size code specified. Expected 0 to 11.     |
  1460.       | |11  |  Bad baud rate code. Expected 0 to 9.                  |
  1461.       | |12  |  Loopback test fails.                                  |
  1462.       | |13  |  UART undefined.                                       |
  1463.       | |14  |  Missing or bad UART. (no UART hardware ?)             |
  1464.       | |15  |  Port already enabled.                                 |
  1465.       | |16  |  ISR (interrupt) already in use.                       |
  1466.       | |17  |  No such IRQ. (Should be 2 to 7)                       |
  1467.       | |18  |  ISR limit (maximum of 4 PC IRQs) exceeded.            |
  1468.       | |19  |  Shareware screen cannot be displayed.                 |
  1469.       | |20  |  5-minute runtime expired (32-bit lib ONLY).           |
  1470.       +-+----+---+--------------------------+-------------------------+
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.      PCL4C Reference Manual                                    Page 25
  1501.  
  1502.                              Code Examples
  1503.  
  1504.  
  1505.  
  1506.       SioRxBuf / SioTxBuf Example
  1507.  
  1508.  
  1509.       int BufSize = 1024;
  1510.       int SizeCode = Size1024;
  1511.       char far *Ptr;
  1512.       int BufSeg;
  1513.       ...
  1514.       /* allocate receive buffer + 16 bytes */
  1515.       Ptr = (char far *) _fmalloc(BufSize+16);
  1516.       BufSeg = FP_SEG(Ptr) + ((FP_OFF(Ptr)+15)>>4);
  1517.       /* pass receive buffer segment to PCL4C */
  1518.       SioRxBuf(Port,BufSeg,SizeCode);
  1519.       /* allocate transmit buffer + 16 bytes */
  1520.       Ptr = (char far *) _fmalloc(BufSize+16);
  1521.       BufSeg = FP_SEG(Ptr) + ((FP_OFF(Ptr)+15)>>4);
  1522.       /* pass transmit buffer segment to PCL4C */
  1523.       SioTxBuf(Port,BufSeg,SizeCode)
  1524.  
  1525.  
  1526.       DigiBoard Example
  1527.  
  1528.  
  1529.       /* use 0x140 for odd IRQs & 0x141 for even IRQs */
  1530.       SioPorts(8,COM1,0x140,DIGIBOARD);
  1531.       for(i=COM1;i<=COM8;i++)
  1532.         {/* set DigiBoard UART addresses */
  1533.          SioUART(i,0x100+8*i);
  1534.          /* set DigiBoard for IRQ5 */
  1535.          SioIRQ(i,IRQ5);
  1536.         }
  1537.  
  1538.  
  1539.       BOCA Board Example
  1540.  
  1541.  
  1542.       /* use base port + 7 */
  1543.       SioPorts(16,COM1,0x100+7,BOCABOARD);
  1544.       for(i=COM1;i<=COM16;i++)
  1545.         {/* set BOCA Board UART addresses */
  1546.          SioUART(i,0x100+8*i);
  1547.          /* set DigiBoard for IRQ5 */
  1548.          SioIRQ(i,IRQ5);
  1549.         }
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.      PCL4C Reference Manual                                    Page 26
  1561.  
  1562.